//unity4都是用lambert
//金属流
Shader "Part4/09glassShader" {
	Properties {
		_MainTex ("Base (RGB)", 2D) = "white" {}
		_Glossiness ("Smoothness", Range(0,1)) = 0.5
		_Metallic ("Metallic", Range(0,1)) = 0.0
		_Color("Color",Color) = (1,1,1,1)
		_BumpMap("Normal",2D) = "bump"{}
		_Magnitude("Magnitude",Range(0,1)) = 0.1
		_CausticMap("CausticMapTex",2D) = "white"{}
		_WaterColor("waterColor",Color) = (1,1,1,1)
	}
	SubShader {
		Tags 
		{
			 "Queue"="Transparent" 
			 "IgnoreProjector"="True" // 忽略投影器
			 "RenderType"="Transparent" // 透明渲染
		}

		ZWrite on // 深度写入
		lighting Off // 关闭光照
		Cull Off // 关闭剔除
		Fog(Mode Off)
		Blend One Zero // 混合模式
	
		GrabPass ("_GrabTexture") //在对玻璃第一遍渲染时候，把整个场景拍照
	//绘制在一个名为_GrabTexture的纹理中
	
		Pass
		{
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "UnityCG.cginc"

		sampler2D _GrabTexture;//表示GrabPass上抓取的纹理
	
		struct VertInput
		{
			float4 vertex : POSITION;
			float4 color : COLOR;
			
			float4 texcoord : TEXCOORD0;
		};
		struct VertOutput
		{
			float4 vertex : POSITION;
			float4 color : COLOR;
			float4 texcoord : TEXCOORD0;// 表示纹理坐标
			float4 uvgrab : TEXCOORD1;// BumpMap的纹理坐标
		};

		VertOutput vert(VertInput i)
		{
			VertOutput o;
			o.vertex = mul(UNITY_MATRIX_MVP, i.vertex);
			o.uvgrab = ComputeGrabScreenPos(o.vertex);

			o.texcoord = i.texcoord;
			o.color = i.color;

			return o;
		}
		//这段代码是Unity的ShaderLab中的一段内联函数，用于计算屏幕空间中的位置。
		//在cginc里面 ComputeGrabScreenPos的源码是
//将裁剪空间的坐标转换为屏幕空间的坐标
//以便在后处理效果中使用。通过调整y坐标的符号，可以处理不同平台的纹理坐标差异
// inline float4 ComputeGrabScreenPos (float4 pos) {
//     #if UNITY_UV_STARTS_AT_TOP
//     float scale = -1.0;
//     #else
//     float scale = 1.0;
//     #endif

//     float4 o = pos * 0.5f;
//     o.xy = float2(o.x, o.y*scale) + o.w;
//     o.zw = pos.zw;
//     return o;
// }
		//对Unity光栅化阶段经过顶点插值得到的片元计算，得到每个片元颜色值
		half4 frag(VertOutput i) : COLOR
		{
			fixed4 noise = tex2D(_BumpMap, i.texcoord);
			fixed4 mainColor = tex2D(_MainTex, i.texcoord);

			float time =_Time[1];//Time.time
//sinusoid函数的作用是根据给定的参数计算一个正弦函数的值。
			sinusoid(
				float2(time,time) + noise.xy,
				float2(-1,-1),
				float2(1,1),
				float2(1,1),
			);//当前值，最小值，最大值，周期
			i.uvgrab.xy += waterDisplacement;//给uvgrab加上偏移量
			fixed4 grabColor = tex2Dproj(_GrabTexture, i.uvgrab);
			//causticColor是一个纹理采样的结果，它表示在给定的纹理坐标上采样的颜色值。
			fixed4 causticColor = tex2D(_CausticTex,i.texcoord.xy * 0.25
			+ waterDisplacement * 5
			)
			return grabColor * causticColor * mainColor;
		}


		ENDCG
		}
}
}
//ramp斜坡纹理